package com.itheima.apis.category;

import com.itheima.apis.category.fallback.ICategoryClientFallBack;
import com.itheima.model.book.dtos.CategoryAdminDto;
import com.itheima.model.book.dtos.CategorySaveDto;
import com.itheima.model.common.dtos.ResponseResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * 分类服务Feign客户端
 * 
 * @author itheima
 */
@FeignClient(value = "book-service", contextId = "iCategoryClient", fallback = ICategoryClientFallBack.class)
public interface ICategoryClient {
    
    /**
     * 获取分类树
     */
    @GetMapping("/api/v1/category/tree")
    ResponseResult getCategoryTree();

    // ==================== 管理端接口 ====================
    
    /**
     * 分页查询分类列表（管理端）
     */
    @PostMapping("/api/v1/category/admin/list")
    ResponseResult adminListCategories(@RequestBody CategoryAdminDto dto);

    /**
     * 获取分类详情（管理端）
     */
    @GetMapping("/api/v1/category/admin/{id}")
    ResponseResult adminGetCategoryById(@PathVariable("id") Integer id);

    /**
     * 新增分类（管理端）
     */
    @PostMapping("/api/v1/category/admin")
    ResponseResult adminAddCategory(@RequestBody CategorySaveDto dto);

    /**
     * 更新分类（管理端）
     */
    @PutMapping("/api/v1/category/admin/{id}")
    ResponseResult adminUpdateCategory(@PathVariable("id") Integer id, @RequestBody CategorySaveDto dto);

    /**
     * 删除分类（管理端）
     */
    @DeleteMapping("/api/v1/category/admin/{id}")
    ResponseResult adminDeleteCategory(@PathVariable("id") Integer id);

    /**
     * 更新分类状态（管理端）
     */
    @PutMapping("/api/v1/category/admin/{id}/status")
    ResponseResult adminUpdateCategoryStatus(@PathVariable("id") Integer id, @RequestBody Map<String, Integer> params);

    /**
     * 获取父级分类列表（管理端）
     */
    @GetMapping("/api/v1/category/admin/parents")
    ResponseResult adminGetParentCategories();
}

